# -*- coding: utf-8 -*-
from ITener import ITener
from IAccion import IAccion
from logico.problemas.objetos.Objeto import Objeto
class IRevolvible(ITener):
	
	"""
	Interfaz que es implementada por todos los contenedores que pueden identificar cuando los objetos contenidos estan revueltos o separados.
	@since: 4/14/2011
	@version: 1.0
	"""
	__accion=None;
	def __init__(self, capacidad=0, elementos={}, nombreObjeto=""):
		"""
		Constructor
		@type	self: IRevolvible
		@param	self: referencia al IPosicionable actual
		
		@type	capacidad: int
		@param	capacidad: cantidad maxima de elementos que puede contener / revolver.
		
		@type	elementos: dictionary
		@param	elementos: relacion nombre --> objeto de los elementos contenidos.
		"""
		if isinstance(self, Objeto):
			nombreObjeto=self.getNombre()
		
		ITener.__init__(self, capacidad, elementos)
		self.__revuelto=False
		self.__accion=IAccion(comando="{verbo} {articulo0} {objeto0}", verbo="Revolver", esHeredable=True, objeto=nombreObjeto)
		
	def revolver(self):
		"""
		Metodo que permite revolver el contenido del IRevolvible
		@type	self: IRevolvible
		@param	self: referencia al IPosicionable actual
		"""
		self.__revuelto=True
		
	def tener(self,  objeto):
		"""
		Metodo para agregar elementos al contenido del IRevolvible
		@type	self: IRevolvible
		@param	self: referencia al IPosicionable actual
		
		@type	objeto: Objeto
		@param	objeto: ojeto a agregar al contenido.
		"""
		self.__revuelto=False
		ITener.tener(self, objeto)
		
	def getRevuelto(self):
		"""
		Permite acceder al estado actual del IRevolvible para saber si este esta o no revuelto. True = Revuelto, False = No revuelto
		@type	self: IRevolvible
		@param	self: referencia al IPosicionable actual
		"""
		return self.__revuelto
	
	def getAcciones(self, objeto, heroe=None):
		"""
		Permite acceder a las acciones del objeto contenido.
		@type	self: IRevolvible
		@param	self: referencia al IPosicionable actual
		
		@type	objeto: Objeto
		@param	objeto: ?????
		"""
		if(objeto.getRevuelto()):
			return []
		else:
			return [self.__accion]